package com.example.practica_calculadora;

import java.util.ArrayList;

import android.os.Bundle;
import android.app.Activity;
import android.util.Log;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;

public class MainActivity extends Activity implements OnClickListener {
	// Crear los botones
	EditText ed1;
	Button btn0, btn1, btn2, btn3, btn4, btn5, btn6, btn7, btn8, btn9;
	Button btnMas, btnMenos, btnIgual, btnBorrar, btnDiv, btnMult, btnPunto;
	String aux1 = "", aux2 = "";
	double num1 = 0, num2= 0;
	String operacion = null;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);

		// Pasar la referencia de la vista al codigo
		btn0 = (Button) findViewById(R.id.boton0);
		btn1 = (Button) findViewById(R.id.boton1);
		btn2 = (Button) findViewById(R.id.boton2);
		btn3 = (Button) findViewById(R.id.boton3);
		btn4 = (Button) findViewById(R.id.boton4);
		btn5 = (Button) findViewById(R.id.boton5);
		btn6 = (Button) findViewById(R.id.boton6);
		btn7 = (Button) findViewById(R.id.boton7);
		btn8 = (Button) findViewById(R.id.boton8);
		btn9 = (Button) findViewById(R.id.boton9);

		btnMas = (Button) findViewById(R.id.botonMas);
		btnMenos = (Button) findViewById(R.id.botonMenos);
		btnIgual = (Button) findViewById(R.id.botonIgual);
		btnBorrar = (Button) findViewById(R.id.botonBorrar);
		btnDiv = (Button) findViewById(R.id.botonDiv);
		btnMult = (Button) findViewById(R.id.botonMult);
		btnPunto = (Button) findViewById(R.id.botonPunto);

		// Almaceno todos en un array para setear el metodo onClickListener
		ArrayList<Button> array = new ArrayList<Button>();
		array.add(btn0);
		array.add(btn1);
		array.add(btn2);
		array.add(btn3);
		array.add(btn4);
		array.add(btn5);
		array.add(btn6);
		array.add(btn7);
		array.add(btn8);
		array.add(btn9);
		array.add(btnMas);
		array.add(btnMenos);
		array.add(btnIgual);
		array.add(btnBorrar);
		array.add(btnDiv);
		array.add(btnMult);
		array.add(btnPunto);
		// Implemento el listener en los botones
		for (int i = 0; i < array.size(); i++) {
			Button aux = array.get(i);
			aux.setOnClickListener(this);
		}
		ed1 = (EditText) findViewById(R.id.texto);
	}

	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		// Inflate the menu; this adds items to the action bar if it is present.
		getMenuInflater().inflate(R.menu.main, menu);
		return true;
	}

	@Override
	public void onClick(View v) {

		Button aux = (Button) v;
		String codigo = (String) aux.getText();
		if (!codigo.equalsIgnoreCase("+") && !codigo.equalsIgnoreCase("-")
				&& !codigo.equalsIgnoreCase("/")
				&& !codigo.equalsIgnoreCase("*")
				&& !codigo.equalsIgnoreCase("=")
				&& !codigo.equalsIgnoreCase("C")) {
			if (this.operacion == null && num1 == 0) {
				this.aux1 += aux.getText();
				this.ed1.setText(aux1);
			} else if(this.operacion != null){
				this.aux2 +=  aux.getText();
				this.ed1.setText(aux2);
			}
		} else if (!codigo.equalsIgnoreCase("=")
				&& !codigo.equalsIgnoreCase("C")) {
			if (operacion == null) {
				operacion = codigo;
				
				 if(num1 == 0) num1 = (Double) Double.parseDouble(aux1);
				this.ed1.setText(operacion);
			} else {
				double resultado = 0;
				num2 = (Double) Double.parseDouble(aux2);

				resultado = realizarOperacion(num1, num2, operacion);
				ed1.setText("" + resultado);
				num1 = resultado;
				num2 = 0;
				aux2 = "";
				operacion = codigo;
			}
		} else {
			if (codigo.equalsIgnoreCase("C")) {
				num1 = 0;
				num2 = 0;
				aux1 = "";
				aux2 = "";
				operacion = null;
				ed1.setText(" ");
			} else if (codigo.equalsIgnoreCase("=")) {
				double resultado = 0;
				num2 = (Double) Double.parseDouble(aux2);
				resultado = realizarOperacion(num1, num2, operacion);
				ed1.setText("" + resultado);
				num1 = resultado;
				num2 = 0;
				aux2 = "";
				operacion = null;
			}
		}
	}

	public static double realizarOperacion(double num1, double num2,
			String operacion) {
		double resultado = 0;
		if (operacion.equalsIgnoreCase("+")) {
			resultado = num1 + num2;
		} else if (operacion.equalsIgnoreCase("-")) {
			resultado = num1 - num2;
		} else if (operacion.equalsIgnoreCase("*")) {
			resultado = num1 * num2;
		} else if (operacion.equalsIgnoreCase("/")) {
			resultado = num1 / num2;
		}
		return resultado;
	}

}
